/**
 * OPBillsTBL.java
 * @author pkendzo
 * Email: pkendzo@msn.com
 * 2010
 */
package lu.med.praxiswahl.wahlumed.model.beans;

import java.io.Serializable;
import java.util.Calendar;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;

/**
 * @author pkendzo
 *
 */
@NamedQueries
({
   @NamedQuery(name="findAvailableCreatedBillsByCustomer",
	       query="select bi from OPBillsTBL bi where customer ='"
				    + ":matricule"
				    + "' and bezahlt = true and erstellt = true order by erstell_datum desc"),
   @NamedQuery(name="findAvailableActualBillsByCustomer",
		query="select bi from OPBillsTBL bi where bezahlt = false and imDossier = false and erstellt = true and customer ="
				    + ":matricule"
				    + " order by erstell_datum desc"),
   @NamedQuery(name="findAvailablePayedBillsByCustomer",
		query="select bi from OPBillsTBL bi where bezahlt = true and erstellt = true and customer ="
				    + ":matricule"
				    + " order by erstell_datum desc"),
   @NamedQuery(name="findAvailableBillsInPC",
		query="select bi from OPBillsTBL bi where imDossier = true order by erstell_datum desc"),
   /*@NamedQuery(name="getLastCreatedOPBillNumber",
		query="select max(rechnung_nummer) from OPBillsTBL bi where bi.rechnung_nummer like "
				    + ":actualYear" + "%")*/
})
@Entity
@Table(name = "PRAXIS_OPHONORAR")
public class OPBillsTBL implements Serializable
{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "RECHNUNGSNUMMER")
    private Long rechnung_nummer;

    @Temporal(javax.persistence.TemporalType.DATE)
    @Column(name = "ERSTELL_DATUM", nullable = true)
    private Calendar erstell_datum;

    @Column(name = "RUECKUEBERWIESEN", nullable = true)
    private boolean rueck_ueberweisung;

    @Column(name = "RUECKUEBERWEISUNG_AM", nullable = true)
    private String rueckueberweisung_datum;
    
    @Column(name = "ANZAHLUNG", nullable = true)
    private double anzahlung;
    
    @Column(name = "RECHNUNGSBETRAG", nullable = true)
    private double aPayer; 

    @Column(name = "BEZAHLT", nullable = true)
    private boolean bezahlt;

    @Column(name = "ZUGESCHICKT", nullable = true)
    private boolean zugeschickt;

    @Column(name = "IM_DOSSIER", nullable = true)
    protected boolean imDossier;

    @Column(name = "ERSTELLT", nullable = true)
    private boolean erstellt;

    @Column(name = "CASH", nullable = true)
    private boolean cash;

    @Column(name = "KARTE", nullable = true)
    private boolean karte;

    @Column(name = "WURDE_UEBERWIESEN", nullable = true)
    private boolean ueberweisung;

    @Column(name = "BESONDERHEIT", nullable = true)
    private String besonderheit;

    @Column(name = "KARTENTYP", nullable = true)
    private String karten_typ;

    @Column(columnDefinition = "TEXT", name = "PROTOKOLLIERUNG", nullable = true)
    private String noten;
    
    /*
     * The class of the bill (1 or 2)
     */
    @Column(name = "KLASSE", nullable = true)
    private String bill_class;

    @OneToMany(mappedBy = "rechnungs_nummer", cascade = CascadeType.ALL)
    private Set<OPBillContentsTBL> opBillContent = new HashSet<OPBillContentsTBL>();
    
    /*
     * Customer
     */
    @ManyToOne
    @JoinColumn(name = "PATIENTIN")
    private CustomerTBL customer;
    
    public OPBillsTBL()
    {
	
    }

    /**
     * @return the customer
     */
    public CustomerTBL getCustomer()
    {
        return customer;
    }

    /**
     * @param customer the customer to set
     */
    public void setCustomer(CustomerTBL customer)
    {
        this.customer = customer;
    }

    /**
     * @return the rechnung_nummer
     */
    public Long getRechnung_nummer()
    {
        return rechnung_nummer;
    }

    /**
     * @param rechnung_nummer the rechnung_nummer to set
     */
    public void setRechnung_nummer(Long rechnung_nummer)
    {
        this.rechnung_nummer = rechnung_nummer;
    }

    /**
     * @return the erstell_datum
     */
    public Calendar getErstell_datum()
    {
        return erstell_datum;
    }

    /**
     * @param erstell_datum the erstell_datum to set
     */
    public void setErstell_datum(Calendar erstell_datum)
    {
        this.erstell_datum = erstell_datum;
    }

    /**
     * @return the rueck_ueberweisung
     */
    public boolean isRueck_ueberweisung()
    {
        return rueck_ueberweisung;
    }

    /**
     * @param rueck_ueberweisung the rueck_ueberweisung to set
     */
    public void setRueck_ueberweisung(boolean rueck_ueberweisung)
    {
        this.rueck_ueberweisung = rueck_ueberweisung;
    }

    /**
     * @return the rueckueberweisung_datum
     */
    public String getRueckueberweisung_datum()
    {
        return rueckueberweisung_datum;
    }

    /**
     * @param rueckueberweisung_datum the rueckueberweisung_datum to set
     */
    public void setRueckueberweisung_datum(String rueckueberweisung_datum)
    {
        this.rueckueberweisung_datum = rueckueberweisung_datum;
    }

    /**
     * @return the anzahlung
     */
    public double getAnzahlung()
    {
        return anzahlung;
    }

    /**
     * @param anzahlung the anzahlung to set
     */
    public void setAnzahlung(double anzahlung)
    {
        this.anzahlung = anzahlung;
    }

    /**
     * @return the aPayer
     */
    public double getAPayer()
    {
        return aPayer;
    }

    /**
     * @param payer the aPayer to set
     */
    public void setAPayer(double payer)
    {
        aPayer = payer;
    }

    /**
     * @return the bezahlt
     */
    public boolean isBezahlt()
    {
        return bezahlt;
    }

    /**
     * @param bezahlt the bezahlt to set
     */
    public void setBezahlt(boolean bezahlt)
    {
        this.bezahlt = bezahlt;
    }

    /**
     * @return the zugeschickt
     */
    public boolean isZugeschickt()
    {
        return zugeschickt;
    }

    /**
     * @param zugeschickt the zugeschickt to set
     */
    public void setZugeschickt(boolean zugeschickt)
    {
        this.zugeschickt = zugeschickt;
    }

    /**
     * @return the imDossier
     */
    public boolean isImDossier()
    {
        return imDossier;
    }

    /**
     * @param imDossier the imDossier to set
     */
    public void setImDossier(boolean imDossier)
    {
        this.imDossier = imDossier;
    }

    /**
     * @return the erstellt
     */
    public boolean isErstellt()
    {
        return erstellt;
    }

    /**
     * @param erstellt the erstellt to set
     */
    public void setErstellt(boolean erstellt)
    {
        this.erstellt = erstellt;
    }

    /**
     * @return the cash
     */
    public boolean isCash()
    {
        return cash;
    }

    /**
     * @param cash the cash to set
     */
    public void setCash(boolean cash)
    {
        this.cash = cash;
    }

    /**
     * @return the karte
     */
    public boolean isKarte()
    {
        return karte;
    }

    /**
     * @param karte the karte to set
     */
    public void setKarte(boolean karte)
    {
        this.karte = karte;
    }

    /**
     * @return the ueberweisung
     */
    public boolean isUeberweisung()
    {
        return ueberweisung;
    }

    /**
     * @param ueberweisung the ueberweisung to set
     */
    public void setUeberweisung(boolean ueberweisung)
    {
        this.ueberweisung = ueberweisung;
    }

    /**
     * @return the besonderheit
     */
    public String getBesonderheit()
    {
        return besonderheit;
    }

    /**
     * @param besonderheit the besonderheit to set
     */
    public void setBesonderheit(String besonderheit)
    {
        this.besonderheit = besonderheit;
    }

    /**
     * @return the karten_typ
     */
    public String getKarten_typ()
    {
        return karten_typ;
    }

    /**
     * @param karten_typ the karten_typ to set
     */
    public void setKarten_typ(String karten_typ)
    {
        this.karten_typ = karten_typ;
    }

    /**
     * @return the noten
     */
    public String getNoten()
    {
        return noten;
    }

    /**
     * @param noten the noten to set
     */
    public void setNoten(String noten)
    {
        this.noten = noten;
    }

    /**
     * @return the bill_class
     */
    public String getBill_class()
    {
        return bill_class;
    }

    /**
     * @param bill_class the bill_class to set
     */
    public void setBill_class(String bill_class)
    {
        this.bill_class = bill_class;
    }

    /**
     * @return the opBillContent
     */
    public Set<OPBillContentsTBL> getOpBillContent()
    {
        return opBillContent;
    }

    /**
     * @param opBillContent the opBillContent to set
     */
    public void setOpBillContent(Set<OPBillContentsTBL> opBillContent)
    {
        this.opBillContent = opBillContent;
    }

    
}
